<?php
session_start();
require "include/dbms.inc.php";
require "include/template.inc.php";
require "include/setcontents.inc.php";
require "include/calendario.inc.php";
require "include/accesscontrol.inc.php";
require "include/formcontrol.inc.php";
require "include/tags/htmlhelper.inc.php";

accesscontrol::controllo_privilegi();

function displaydefault(){
    $today_date=time();
    $oid=mysql_query("DELETE FROM prenotazione WHERE prenotazione.data_pren < '{$today_date}'");//elimino le prenotazioni la cui data precede quella odierna
    if (!$oid){
        $message="Errore db nell'eliminazione vecchie prenotazioni";
        $style="alert";
        displaydefault();
    }
    $prenotazioni = setcontents::getResult("SELECT utente.nome,utente.cognome, email_utente,
            servizio_erogato.nome as servizio, servizio_erogato.durata, servizio_erogato.prezzo,prenotazione.data_op,prenotazione.data_pren
            FROM
            prenotazione
            LEFT JOIN
            servizio_erogato
            ON
            prenotazione.id_serv_erog=servizio_erogato.id
            LEFT JOIN
            utente
            ON
            prenotazione.email_utente=utente.email
            WHERE 1 ORDER BY prenotazione.data_pren");//prenotazioni effettuate
    $utenti = setcontents::getResult("SELECT utente.nome, utente.cognome, utente.email
                                      FROM utente
                                      LEFT JOIN privilegi 
                                      ON utente.email=privilegi.email_utente
                                      LEFT JOIN gruppo
                                      ON privilegi.id_gruppo=gruppo.id
                                      WHERE data_di_nascita<>'0000-00-00' and gruppo.nome<>'amministratore' and gruppo.nome<>'backoffice'");
    if (!isset($_GET['by'])){
        $_GET['by']="nome";
    }
    $servizi_erog = setcontents::getResult("SELECT * FROM servizio_erogato ORDER BY ".$_GET['by']." ".$_GET['ord']);

    global $body;
    $body = new Template ("dtml/prenotazione_admin.html");
    $body->setContent("servizi_erog", $servizi_erog);
    $body->setContent("prenotazioni", $prenotazioni);
    if (isset($utenti)){
        $body->setContent("utenti", $utenti);
    }else{//non ci sono utenti registrati
        $body->setContent("utenti", 0);
    }
}

switch ($_POST['op']){
    case 'prenota':
        if (!isset($_POST['check'])){
                $message="Nessun servizio selezionato";
                $style="alert";
                displaydefault();
                break;
        }
        if(!strcmp($_POST['ut_reg'],"0") and !strcmp($_POST['ut_nreg'],"")){
                $message="Nessun utente selezionato";
                $style="alert";
                displaydefault();
                break;
        }
        if (strcmp($_POST['ut_reg'],"0") and strcmp($_POST['ut_nreg'],"")){
                $message="I campi \"utente registrato\" e \"utente non registrato\" sono mutualmente esclusivi";
                $style="alert";
                displaydefault();
                break;
        }
        $ut=$_POST['check'];
        $a=0;
        foreach ($ut as $k => $v){
            $serv_pren[$a]=setcontents::getResult("SELECT * FROM servizio_erogato WHERE servizio_erogato.id='{$v}'");
            $durata+=($serv_pren[$a][0]['durata']*60);//moltiplico per 60 perché la durata è espressa in minuti
            $servizi[$a]=$v;
            $a++;
        }
        $result=setcontents::getResult("SELECT data_pren,SUM(durata)
                                          FROM
                                          prenotazione
                                          LEFT JOIN
                                          servizio_erogato
                                          ON
                                          prenotazione.id_serv_erog=servizio_erogato.id
                                          GROUP BY data_pren ORDER BY data_pren");//leggo le prenotazioni sul database
        if (isset($result)){//Se ci sono prenotazioni escludi i relativi orari da quelli visualizzati all'utente come disponibili.
            $date_list=calendario::calcola_orario($result,$durata);//Passo come parametro le prenotazioni correnti più la durata dei servizi da prenotare
        }else{//se non ci sono prenotazioni imposta gli orari in base ad apertura e chiusura, tenendo conto del giorno di riposo e della durata dei servizi selezionati
            $date_list=calendario::calcola_orario(null,$durata);
            }
        $body= new Template("dtml/pannello_pren_ut.html");
        if (strcmp($_POST['ut_reg'],"0")){//L'amministratore e il backoffice possono anche effettuare prenotazioni per utenti non registrati. Queste vengono inserite nel sistema per evitare che le prenotazioni effettuate via internet si sovrappongano a quelle effettuate telefonicamente o in altra maniera.
            $body->setContent("utente",$_POST['ut_reg']);//Tengo traccia del nome utente nel form in un campo hidden.
        }else{
            $body->setContent("utente",$_POST['ut_nreg']);
        }
        $body->setContent("action",$_SERVER['SCRIPT_NAME']);
        $body->setContent("hidden",$servizi);
        $body->setContent("calendario",$date_list);
        $body->setContent("riposo",htmlhelper::day(null,date("D",$orario[0]['giorno_chiusura'])));
        break;

        case 'conferma':
            switch ($_POST['operation']){
                case 'modifica':
                    if (isset($_POST['ora'])){//se è stato checkato un orario
                        $oid=mysql_query("UPDATE prenotazione SET data_pren='{$_POST['ora']}',data_op='{$_POST['data_op']}'
                                            WHERE email_utente='{$_POST['utente']}' AND data_pren='{$_POST['old_date']}'");
                        if (!$oid){
                                $message="Si è riscontrato un errore nella modifica";
                                $style="alert";
                                displaydefault();
                                break;
                            }
                        $message="Modifica effettuata con successo";
                        $style="message";
                    }else{
                        $message="Per inoltrare la prenotazione si deve selezionare un orario";
                        $style="alert";
                    }
                    break;

                default:
                    $data_op=time();
                    $servizi=$_POST['servizi'];
                    $utente = addslashes($_POST['utente']);
                    if (mysql_num_rows(mysql_query("SELECT * FROM utente WHERE email='{$utente}'"))==0){//se l'utente non è registrato fai un inserimento su utente per aggirare il problema del vincolo referenziale.
                        list($usec, $sec) = explode(' ', microtime());
                        mt_srand((float) $sec + ((float) $usec * 100000));
                        $pwd=uniqid(mt_rand(), true);
                        $oid=mysql_query("INSERT INTO utente VALUES('{$utente}','','','','','','','','','','{$utente}',MD5('{$pwd}'))");//assegno al campo email il valore del campo contenente nome e cognome dell'utente. La pwd generata è casuale. non dovrebbero esserci problemi di sicurezza.
                        if (!$oid){
                            $message="Si è riscontrato un errore nella prenotazione";
                            $style="alert";
                            displaydefault();
                        }
                    }
                    if (isset($_POST['ora'])){//se è stato checkato un orario
                        foreach ($servizi as $k=>$v){
                            $oid=mysql_query("INSERT INTO prenotazione VALUES (
                                             '{$v}',
                                             '{$utente}',
                                             '{$_POST['ora']}',
                                             '{$data_op}')");//in caso di utente non registrato il db non da errore sul vincolo di integrità referenziale poiché ho inserito
                             if (!$oid){
                                 $error=mysql_errno();
                                 if ($error==1062){
                                     $message="Prenotazioni aggiornate";
                                     $style="message";
                                 }else{
                                     $message="Si è riscontrato un errore nella prenotazione. Ci scusiamo per il disagio.".mysql_error();
                                     $style="alert";
                                 }
                             }else{
                                 $message="Prenotazione effettuata con successo";
                                 $style="message";
                             }
                        }
                    }else{
                        $message="Per inoltrare la prenotazione si deve selezionare un orario";
                        $style="alert";
                    }
                }
                displaydefault();
                break;

        case 'elimina':
            if (!isset($_POST['check_pren'])){
                $message="Nessuna prenotazione selezionata";
                $style="alert";
                displaydefault();
                break;
            }
            $pren=$_POST['check_pren'];
            foreach ($pren as $k=>$v){
                list($email,$data,$durata)=explode("-",$v);
                $result=setcontents::getresult("SELECT cognome, SUM(1) FROM utente LEFT JOIN prenotazione ON utente.email=prenotazione.email_utente WHERE utente.email='{$email}' GROUP BY email");
                if ($result[0]['cognome']==null and $result[0]['SUM(1)']==1){//l'utente non è registrato. Il campo email e nome sono riempiti con l'identificativo assegnato dal backoffiece al momento della prenotazione.
                    $oid=mysql_query("DELETE FROM utente WHERE email='{$email}'");
                    if (!$oid){
                        $message="Si è riscontrato un errore nell'eliminazione".mysql_error();
                        $style="alert";
                        displaydefault();
                        break;
                    }
                }
                $oid=mysql_query("DELETE FROM prenotazione WHERE email_utente='{$email}' AND  data_pren='{$data}'");
                if (!$oid){
                        $message="Si è riscontrato un errore nell'eliminazione".mysql_error();
                        $style="alert";
                        displaydefault();
                        break;
                }
                $message="Eliminazione conclusa con successo";
                $style="message";
                displaydefault();
            }            
            break;

        case 'modifica':
            if (count($_POST['check_pren'])>1){
                $message="Può essere modificata una sola prenotazione per volta";
                $style="alert";
                displaydefault();
                break;
            }
            if (!isset($_POST['check_pren'])){
                $message="Nessuna prenotazione selezionata";
                $style="alert";
                displaydefault();
                break;
            }
            list ($email,$data,$durata)=explode("-",$_POST['check_pren'][0]);            
            $result=setcontents::getResult("SELECT data_pren,SUM(durata)
                                          FROM
                                          prenotazione
                                          LEFT JOIN
                                          servizio_erogato
                                          ON
                                          prenotazione.id_serv_erog=servizio_erogato.id
                                          WHERE data_pren<>'{$data}' AND email_utente<>'$email'
                                          GROUP BY data_pren
                                          ORDER BY data_pren");//leggo le prenotazioni sul database
            $date_list= calendario::calcola_orario($result,$durata);
            $body= new Template("dtml/pannello_pren_ut.html");
            $body->setContent("calendario",$date_list);
            $body->setContent("riposo",htmlhelper::day(null,date("D",$orario[0]['giorno_chiusura'])));
            $body->setContent("op","modifica");
            $body->setContent("utente",$email);
            $body->setContent("old_date",$data);
            break;

        default:
            displaydefault();
}

setcontents::setTemplate();
setcontents::setMenu($message,$style);
setcontents::setBody($body);

$main->close();

?>
